Basé sur Poisson Process 1 et Poisson Process 2. On va commencer avec la première vidéo.
In [1]:
from IPython.display import YouTubeVideo
YouTubeVideo("31MoWKnPDaU")
Out[1]:
$X =$ le nombre de voitures qui passent en une heure. $X$ est une variable aléatoire.
$E(X) = \lambda =$ l'espérance de X, ou le nombre moyen de voitures qui passent en une heure.
$\lambda = np$, ou $n =$ le nombre de périodes et $p =$ le nombre moyen de voitures qui passent en une période.
Si $n = 60$, $\lambda = 60\frac{\lambda}{60}$. Donc on a une distribution binomiale.
$$P(X=k) = {60 \choose k} \left(\frac{\lambda}{60}\right)^k \left(1 - \frac{\lambda}{60}\right)^{(60-k)}$$Mais $\frac{\lambda}{60}$ n'est pas une probabilité, parce qu'il peut être plus qu'un. Alors ça marche comment ?
Et maintenant, la vidéo a une équation :
$$\lim_{x \rightarrow \infty}{\left(1 + \frac{a}{x}\right)^x} = e^a$$Franchement, j'ai oublié tout ça. Il me faut réviser cette limite avant de continuer.
D'abord, je vais charger la bibliothèque sympy
, qui peut faire les calculs formels (ou « symboliques »).
In [2]:
import sympy as sym
sym.init_printing()
Puis on va construire une expression formelle :
In [3]:
a, x, y, z = sym.symbols("a, x, y, z")
expr = (1 + a/x)**x
expr
Out[3]:
Et prendre la limite :
In [4]:
sym.limit(expr, x, sym.oo)
Out[4]:
Merci, c'est très gentil, mais je veux la comprendre. Il y a une éxplication en anglais sur Yahoo. Je vais utiliser ça.
$$f = \lim_{x \rightarrow \infty}{\left(1 + \frac{a}{x}\right)^x}$$$$\log{f} = \log{\lim_{x \rightarrow \infty}{\left(1 + \frac{a}{x}\right)^x}}$$$$\log{f} = \lim_{x \rightarrow \infty}{x \log{\left(1 + \frac{a}{x}\right)}}$$Soit $y$ égal à $1/x$ :
$$\log{f} = \lim_{y \rightarrow 0}{\frac{1}{y} \log{\left(1 + ay\right)}}$$Et maintenant il nous faut la série Taylor. Soit $z = -ay$ :
In [5]:
approx = sym.series(sym.log(1 - z))
approx
Out[5]:
In [6]:
approx = approx.subs({z: -(a*y)})
approx
Out[6]:
Et maintenant, utilisons l'$1/y$ dans :
$$\log{f} = \lim_{y \rightarrow 0}{\frac{1}{y} \log{\left(1 + ay\right)}}$$
In [7]:
sym.simplify((1/y) * approx)
Out[7]:
Mais la limite de tous les termes avec $y$ est 0, et donc on a :
$$log{f} = \lim_{y \rightarrow \infty}{a} = a$$$$e^{log{f}} = f = e^a$$
In [8]:
YouTubeVideo("sWAqWRPqLok")
Out[8]:
Des équations de la vidéo :
$$E(X) = \lambda = np$$(Il faut réviser l'espèrance d'une distribution binomiale.)
$$p = \text{probabilité d'une réussite} = \frac{\lambda}{n}$$La probabilité que $k$ voitures passent :
$$\begin{aligned} P(X=k) & = \lim_{n \rightarrow\infty}{{n \choose k} \left(\frac{\lambda}{n}\right)^k \left(1-\frac{\lambda}{n}\right)^{n-k}} \\ & = \lim_{n \rightarrow\infty}{ \frac{n!}{(n-k)!k!} \frac{\lambda^k}{n^k} \left(1-\frac{\lambda}{n}\right)^n \left(1-\frac{\lambda}{n}\right)^{-k}} \\ & = \lim_{n \rightarrow\infty}{ \frac{n!}{(n-k)!n^k} \frac{\lambda^k}{k!} e^{-\lambda} 1^{-k}} \\ & = \lim_{n \rightarrow\infty}{ \frac{n(n-1)(n-2) \cdots (n-k+1)}{n^k} \frac{\lambda^k}{k!} e^{-\lambda}} \\ & = \lim_{n \rightarrow\infty}{ \frac{n^k + \mathcal{O}(n^{k-1})}{n^k} \frac{\lambda^k}{k!} e^{-\lambda}} \\ & = \frac{\lambda^k}{k!}e^{-\lambda} \end{aligned}$$Enfin, c'est fini. On peut jouer avec les graphiques maintenant.
In [9]:
%pylab inline --no-import-all
In [10]:
import math
def poisson(lambda_, k):
return lambda_**k * math.exp(-lambda_) / math.factorial(k)
# Nos paramètres.
lambda_ = 7 # Le nombre moyen de voitures qui passent.
k = range(0,21) # Les probabilités de 0 à 20 voitures.
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 0.8, 0.8])
axes.plot(k, map(lambda k: poisson(lambda_, k), k))
axes.set_xlabel("Voitures")
axes.set_ylabel("Prob")
axes.axvline(3, color='r')
axes.set_title("Distribution Poisson")
None
In [11]:
from scipy import stats
# Créer une distribution Poission avec lambda égal à 7.
nv = stats.poisson(7)
# Trouver la moyenne et l'écart type.
nv.mean(), nv.std()
Out[11]:
In [12]:
def dessiner(titre, fonc, x):
"""Dessiner fonc(x)."""
fig = plt.figure()
axes = fig.add_axes([0.1, 0.1, 0.8, 0.8])
axes.plot(x, fonc(x))
axes.set_title(titre)
dessiner("Distribution Poisson", nv.pmf, range(0, 21))
In [13]:
dessiner("Distribution Poisson (cdf)", nv.cdf, range(0, 21))
In [14]:
dessiner("Distribution Poisson (sf)", nv.sf, range(0, 21))